﻿#include <iostream>

class Node {
public:
    int data;
    Node* next;
    Node(int val) : data(val), next(nullptr) {}
};

class LinkedListStack {
private:
    Node* topNode;
public:
    LinkedListStack() : topNode(nullptr) {}

    ~LinkedListStack() {
        while (!isEmpty()) {
            pop();
        }
    }

    void push(int value) {
        //这里规则就是，初始化会有a对象。在添加数据时创建b对象， 将 a添加到b的next对象里。在将有数据的newnode添加到topnode里
        //后续排除初始化对象，后面一样，a对象会有前面留下的数据
        Node* newNode = new Node(value);
        newNode->next = topNode;
        topNode = newNode;
    }

    int pop() {
        if (isEmpty()) {
            std::cout << "栈为空" << std::endl;
            return -1;
        }
        //top给临时对象，获取临时对象里的data,将topnode下next node对象给topnode,删除临时对象。
        // 也就是删除顶层topnode ，下面对象顶上来
        Node* temp = topNode;
        int value = temp->data;
        topNode = topNode->next;
        delete temp;
        return value;
    }

    int top() {
        if (isEmpty()) {
            std::cout << "栈为空" << std::endl;
            return -1;
        }
        return topNode->data;
    }

    bool isEmpty() {
        return topNode == nullptr;
    }
};

int main() {
    LinkedListStack stack;
    stack.push(1000);
    stack.push(2000);
    stack.push(3000);

    std::cout << stack.pop() << " 从栈中弹出\n";
    std::cout << "当前栈顶: " << stack.top() << std::endl;

    return 0;
}